// Copyright 2023 Leidos
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once

#include "sensor_data_sharing_msg/detected_object_data_common.hpp"
#include "sensor_data_sharing_msg/obstacle/detected_obstacle_data.hpp"
#include "sensor_data_sharing_msg/vehicle/detected_vehicle_data.hpp"
#include "sensor_data_sharing_msg/vru/detected_vru_data.hpp"
#include <variant>

namespace streets_utils::messages::sdsm{
    struct detected_object_data {
        /**
         * @brief Common data for detected object.
         */
        detected_object_data_common _detected_object_common_data;
        /**
         * @brief Detected object optional data associated with object type classification.
         */
        std::optional<std::variant<detected_obstacle_data, detected_vehicle_data, detected_vru_data>> _detected_object_optional_data;
    };
}